package com.rustic.server.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rustic.server.dto.EventActivityUpdateDTO;
import com.rustic.server.po.EventActivity;
import com.rustic.server.query.EventActivityAdminListQuery;
import com.rustic.server.query.EventActivityUserListQuery;
import com.rustic.server.vo.EventActivityVO;
import com.rustic.server.vo.EventActivityWebVO;
import com.rustic.server.vo.list.EventActivityAdminListVO;
import com.rustic.server.vo.list.EventActivityWebListVO;

import java.util.List;
import java.util.Map;

/**
 * 表[event_activity]对应的服务类
 *
 * @author auto
 */

public interface EventActivityService extends IService<EventActivity> {

    String EVENT_ACTIVITY_NOT_EXIST = "事件活动不存在";

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList id列表
     * @return 事件活动列表
     */
    List<EventActivity> listByIdIn(List<Integer> idList);

    /**
     * 查询（根据ID 批量查询）并转换成Map
     *
     * @param idList id列表
     * @return 事件活动列表
     */
    Map<Integer, EventActivity> mapByIdIn(List<Integer> idList);

    /**
     * 管理列表查询条件
     *
     * @param query 查询参数
     * @return 查询条件
     */
    LambdaQueryWrapper<EventActivity> toAdminListWrapper(EventActivityAdminListQuery query);

    /**
     * toAdminListVo
     *
     * @param eventActivityList eventActivityList
     * @return AdminListVO
     */
    List<EventActivityAdminListVO> toAdminListVo(List<EventActivity> eventActivityList);

    /**
     * toWebListVo
     *
     * @param eventActivityList eventActivityList
     * @param userId            userId
     * @return WebListVo
     */
    List<EventActivityWebListVO> toWebListVo(List<EventActivity> eventActivityList, int userId);

    /**
     * 用户活动事件列表查询条件
     *
     * @param query 查询参数
     * @return 查询条件
     */
    LambdaQueryWrapper<EventActivity> toUserListWrapper(EventActivityUserListQuery query);

    /**
     * 添加事件/活动
     *
     * @param eventActivity eventActivity
     */
    void add(EventActivity eventActivity);

    /**
     * 根据id获取事件/活动详情
     *
     * @param id id
     * @return EventActivityVO
     */
    EventActivityVO getDetailById(int id);

    /**
     * 更新
     *
     * @param eventActivityUpdateDTO eventActivityUpdateDTO
     */
    void update(EventActivityUpdateDTO eventActivityUpdateDTO);

    /**
     * 事件/活动发布或下架
     *
     * @param id id
     * @return int 返回修改后的状态
     */
    int enabled(int id);

    /**
     * 前台展示风貌详情
     *
     * @param id 事件活动id
     * @return EventActivityWebVO
     */
    EventActivityWebVO getByIdToWeb(int id);
}
